<?xml version="1.0"?>
<component name="org.nuxeo.retention.pageprovider.contrib.override">

  <require>org.nuxeo.retention.pageprovider.contrib</require>

  <extension point="providers" target="org.nuxeo.ecm.platform.query.api.PageProviderService">

    <coreQueryPageProvider name="manual_retention_rule_suggestion">
      <whereClause>
        <predicate operator="=" parameter="retention_rule:docTypes">
          <field name="docType"/>
        </predicate>
        <fixedPart escapeParameters="true" quoteParameters="false"> dc:title ILIKE '?%' AND ecm:mixinType =
          'RetentionRule' AND retention_rule:enabled = 1 AND
          ecm:isTrashed = 0
        </fixedPart>
      </whereClause>
      <sort ascending="true" column="ecm:pos"/>
      <pageSize>50</pageSize>
    </coreQueryPageProvider>

    <coreQueryPageProvider name="active_retention_rule">
      <pattern escapeParameters="true" quoteParameters="false"> SELECT
        * FROM Document WHERE ecm:mixinType = 'RetentionRule' AND
        retention_rule:enabled = 1 AND ecm:isTrashed = 0
      </pattern>
      <sort ascending="true" column="ecm:pos"/>
      <pageSize>50</pageSize>
    </coreQueryPageProvider>

    <genericPageProvider class="org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider" name="retention_search">
      <searchDocumentType>RetentionSearch</searchDocumentType>
      <whereClause>
        <fixedPart>
          file:content/name IS NOT NULL
          AND ecm:isVersion = 0
          AND ecm:mixinType != 'HiddenInNavigation'
        </fixedPart>
        <predicate operator="FULLTEXT" parameter="ecm:fulltext">
          <field name="ecm_fulltext" schema="retention_search"/>
        </predicate>
        <predicate operator="IN" parameter="dc:creator">
          <field name="dc_creator" schema="retention_search"/>
        </predicate>
      </whereClause>
      <aggregates>
        <aggregate id="doc_type_agg" parameter="ecm:primaryType" type="terms">
          <field name="doc_type_agg" schema="retention_search"/>
          <properties>
            <property name="size">10</property>
          </properties>
        </aggregate>
        <aggregate id="rules_agg" parameter="record:ruleIds" type="terms">
          <field name="rules_agg" schema="retention_search"/>
          <properties>
            <property name="size">10</property>
          </properties>
        </aggregate>
        <aggregate id="record_retain_agg" parameter="record:retainUntil" type="date_range">
          <field name="record_retain_agg" schema="retention_search"/>
          <properties>
            <property name="format">"dd-MM-yyyy"</property>
          </properties>
          <dateRanges>
            <dateRange fromDate="now-24H" key="last24h" toDate="now"/>
            <dateRange fromDate="now-7d" key="lastWeek" toDate="now-24H"/>
            <dateRange fromDate="now-1M" key="lastMonth" toDate="now-7d"/>
            <dateRange fromDate="now-1y" key="lastYear" toDate="now-1M"/>
            <dateRange key="priorToLastYear" toDate="now-1y"/>
          </dateRanges>
        </aggregate>
        <aggregate id="ecm_retain_agg" parameter="ecm:retainUntil" type="date_range">
          <field name="ecm_retain_agg" schema="retention_search"/>
          <properties>
            <property name="format">"dd-MM-yyyy"</property>
          </properties>
          <dateRanges>
            <dateRange fromDate="now" key="next24Hours" toDate="now+24H"/>
            <dateRange fromDate="now+24H" key="beforeAWeek" toDate="now+7d"/>
            <dateRange fromDate="now+7d" key="beforeAMonth" toDate="now+1M"/>
            <dateRange fromDate="now+1M" key="beforeAYear" toDate="now+1y"/>
            <dateRange fromDate="now+1y" key="afterAYear" toDate="now+1000y"/>
            <dateRange fromDate="now+1000y" key="indeterminate"/>
          </dateRanges>
        </aggregate>
      </aggregates>
      <sort ascending="true" column="ecm:retainUntil"/>
      <quickFilters>
        <quickFilter name="withoutRule">
          <clause>record:ruleIds/* IS NULL</clause>
          <clause>ecm:retainUntil IS NULL</clause>
        </quickFilter>
        <quickFilter name="withRule">
          <clause>record:ruleIds/* IS NOT NULL</clause>
          <clause>ecm:retainUntil IS NOT NULL</clause>
        </quickFilter>
        <quickFilter name="hasLegalHold">
          <clause>ecm:hasLegalHold = 1</clause>
        </quickFilter>
        <quickFilter name="hasNotLegalHold">
          <clause>ecm:hasLegalHold = 0</clause>
        </quickFilter>
        <quickFilter name="exceptTrashed">
          <clause>ecm:isTrashed = 0</clause>
        </quickFilter>
      </quickFilters>
      <pageSize>20</pageSize>
    </genericPageProvider>

  </extension>

</component>
